GSD planning cutover + Phase 2: binding-correctness engine test hardening - #30
Merged
Conversation
GSD is now the source of truth for project tracking. Reconcile .planning to the real git state and retire FIX-PLAN.md as the working doc. - Mark ENG-01/T7 complete across REQUIREMENTS/ROADMAP/STATE/PROJECT (shipped pre-GSD via #29 — double-checked locking + same/distinct-interface stress tests) - Clear the stale "T7 race open" concern in STATE; log the generator-serialization decision (one gate over all generation; not Lazy-per-type) - Phase 2 now: ENG-01 done; COLL-01 (C1, deferred) + TEST-01/02/03 remain - Freeze FIX-PLAN.md with a banner pointing at .planning/ (kept for its per-item file:line detail, mined by each phase's CONTEXT/PLAN) Local branch only (no push) — rides the next work branch to avoid a doc-only master alpha. SESSION-HANDOFF.md left uncommitted (living handoff).
…NG-01 verify-only)
- last-writer-wins across two ordered binders - later silent binder does not clobber earlier set value - [SettingsProperty] DefaultValue survives when no binder sets the property
- null for non-nullable int resolves to 0 - Nullable<int> null resolves to null; "42" strips and converts to 42 - ConverterType on IEnumerable<int> bypasses the collection converter (sentinel wins)
- Scalar Uri positive: bound URL string resolves to new Uri(value) - Scalar DateTime positive: yyyy-MM-dd string resolves via ParseExact - One DateTime format-mismatch negative asserts SettingsPropertyValueException type only - No array-of-* duplication (owned by CollectionConversionTests); no redaction re-proof (ExceptionRedactionTests)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this PR does
Two related pieces on the pre-stable
v2.0.0line:.planning/as the single source of truth for project planning and freezes the legacyFIX-PLAN.mdas a historical reference. Reconciles.planning/with the already-merged T7 generator-concurrency fix (Close the SettingsClassGenerator concurrency race (T7) #29).src/changes.Phase 2 details
New tests (all under
src/Tests/ExistForAll.SimpleSettings.UnitTests/):Core/ValuesPopulatorTests.csDefaultValuesurvivesCore/TypeConverterTests.csnull → 0;int?null → null;"42" → 42;ConverterTypebypasses the collection converterConversion/ScalarConversionTests.csUripositive; scalarDateTimepositive; one format-mismatch negative (exception type only — redaction stays owned byExceptionRedactionTests)SettingsClassGeneratorconcurrency gate (_generationGate, double-checked locking) + same/distinct-interface stress tests satisfy success criterion Validate settings #4 — already shipped in Close the SettingsClassGenerator concurrency race (T7) #29. No code change.List<T>/IList<T>/ICollection<T>broaden-vs-document+throw decision is being held). Documented in the plan's<deferred>section,PROJECT.md, andVERIFICATION.md; it is not a coverage gap.Verification
src/Core/modified across the phase.02-VERIFICATION.md).Notes
.planning/planning artifacts and theFIX-PLAN.mdfreeze.REQUIREMENTS.mdstill has 13 brownfield baseline IDs (BIND-01…NAME-01) present in the body but not yet in the traceability table — pre-existing, tracked separately, not introduced here.